package com.syedu.day11;

/**
 * description：java.lang.Object类,它是所有Java类的顶级父类,任何Java类都是直接或者间接继承于它的
 *
 * 本类用来演示Object类中的方法,getClass()
 * 它是用来获取当前类的类实例,类实例有且只有一份,对应的Java类型是java.lang.Class类,
 * Class类是我们后面反射技术的核心类.
 *
 * @author Administrator
 * @date 2022/3/23 9:16
 */
public class ObjectDemo2 {
    public static void main(String[] args) throws ClassNotFoundException {
        Emp emp1 = new Emp(1, "jack", 30,null);
        Emp emp2 = new Emp(2, "rose", 25,null);
        /**
         * java.lang.Class,它是用来描述类的类,Object的getClass()方法获取的就是Class实例
         *
         * 结论:
         * 一个类(Emp)无论创建了多少个对象(emp1,emp2...),它的Class实例有且只有一个
         */
        Class clazz1 = emp1.getClass();
        Class clazz2 = emp2.getClass();
        System.out.println(clazz1 == clazz2);//true

        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");

        /**
         * 如何获取类的Class实例?
         */
        //1.Object的getClass()方法(要求先创建类的对象,然后调动getClass()方法)

        //2.Class类中的静态方法forName("类的全限定名")
        //注意: 如果传入的类名有误,则会抛出异常:java.lang.ClassNotFoundException
        //注意: 此方法要求强制处理异常,此处暂时先在main()方法上使用throws ClassNotFoundException来抛出
        Class clazz3 =  Class.forName("com.syedu.day11.Emp");
        System.out.println(clazz3);
        System.out.println(clazz1 == clazz3);//true

        //3.类名.class属性
        Class clazz4 = Emp.class;
        System.out.println(clazz1 == clazz4);//true
    }
}